#ifndef SMIL_CORE_H_INCLUDED
#define SMIL_CORE_H_INCLUDED
#include <glibmm.h>
#include <libxml++/libxml++.h>
#include "duration.h"

namespace smil{
// abstract base class for all SMIL elements. We are treating everything as switchable, too
class SMILbase: public Glib::Object // Is (constructable from, writeable to) an XML element
{
    public:
    Glib::ustring get_qname();  // Storing the class as text - used for XML output. Assumed unique per-class.
    Glib::ustring id; /// XML element id
    std::list< Glib::RefPtr<SMILbase> > children; // I think this is the easiest way to do this?
    Glib::RefPtr<SMILbase> parent; // Who owns us
    duration get_syncbase(); // for untimed elements
    duration get_implicit_syncbase(SMILbase *); ///This will be overrided by subclasses like <par> and <seq>
    duration get_begin(); // for untimed elements - make this a list later
    duration get_end(); // for untimed elements - make this a list later
    protected:
    Glib::ustring qname; /// XML element name. Unique per class.
    // Has "Core" attributes: alt, baseProfile, class, label, longdesc, readIndex, title, version, xml:base, xml:id (id) (ID)
    // Has "internationalization" attributes: its:dir, its:locNote, its:locNoteRef, its:locNoteType, its:term, its:termInfoRef, its:translate, xml:lang
    // Has/Does skip-content processing
};
}
#endif // SMIL_CORE_H_INCLUDED
